{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 感知机实验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 兼容python2和python3\n",
    "from __future__ import print_function\n",
    "\n",
    "import numpy as np\n",
    "from numpy.linalg import inv\n",
    "import scipy as sp\n",
    "from scipy.optimize import leastsq\n",
    "import pandas as pd\n",
    "import sklearn\n",
    "from sklearn.linear_model import Perceptron\n",
    "from sklearn.datasets import load_iris\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实验一 感知机分类\n",
    "使用Iris数据集中两个分类的数据和[sepal length，sepal width]作为特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# load data\n",
    "iris = load_iris()\n",
    "df = pd.DataFrame(iris.data, columns=iris.feature_names)\n",
    "df['label'] = iris.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2    50\n",
       "1    50\n",
       "0    50\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']\n",
    "df.label.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0xbc790f0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')\n",
    "plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "# plt.legend（）函数主要的作用就是给图加上图例\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.array(df.iloc[:100, [0, 1, -1]])\n",
    "X, y = data[:,:-1], data[:,-1]\n",
    "y = np.array([1 if i == 1 else -1 for i in y])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据线性可分，二分类数据\n",
    "# 此处为一元一次线性方程\n",
    "class Model:\n",
    "    def __init__(self):\n",
    "        self.w = np.ones(len(data[0]) - 1, dtype=np.float32)\n",
    "        self.b = 0\n",
    "        self.l_rate = 0.1\n",
    "        # self.data = data\n",
    "\n",
    "    def sign(self, x, w, b):\n",
    "        y = np.dot(x, w) + b\n",
    "        return y\n",
    "\n",
    "    # 随机梯度下降法\n",
    "    def fit(self, X_train, y_train):\n",
    "        is_wrong = False\n",
    "        while not is_wrong:\n",
    "            wrong_count = 0\n",
    "            for d in range(len(X_train)):\n",
    "                X = X_train[d]\n",
    "                y = y_train[d]\n",
    "                if y * self.sign(X, self.w, self.b) <= 0:\n",
    "                    self.w = self.w + self.l_rate * np.dot(y, X)\n",
    "                    self.b = self.b + self.l_rate * y\n",
    "                    wrong_count += 1\n",
    "            if wrong_count == 0:\n",
    "                is_wrong = True\n",
    "        return 'Perceptron Model!'\n",
    "\n",
    "    def score(self):\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Perceptron Model!'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perceptron = Model()\n",
    "perceptron.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0xc4d2da0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_points = np.linspace(4, 7, 10)\n",
    "y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]\n",
    "plt.plot(x_points, y_)\n",
    "\n",
    "plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')\n",
    "plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实验二 scikit-learn实例\n",
    "使用Iris数据集中两个分类的数据和[sepal length，sepal width]作为特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda\\conda\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:183: FutureWarning: max_iter and tol parameters have been added in Perceptron in 0.19. If max_iter is set but tol is left unset, the default value for tol in 0.19 and 0.20 will be None (which is equivalent to -infinity, so it has no effect) but will change in 0.21 to 1e-3. Specify tol to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Perceptron(alpha=0.0001, class_weight=None, early_stopping=False, eta0=1.0,\n",
       "      fit_intercept=True, max_iter=1000, n_iter=None, n_iter_no_change=5,\n",
       "      n_jobs=None, penalty=None, random_state=0, shuffle=True, tol=None,\n",
       "      validation_fraction=0.1, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf = Perceptron(fit_intercept=True, max_iter=1000, shuffle=True)\n",
    "clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 66.1 -83.3]]\n"
     ]
    }
   ],
   "source": [
    "# Weights assigned to the features.\n",
    "print(clf.coef_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-106.]\n"
     ]
    }
   ],
   "source": [
    "# 截距 Constants in decision function.\n",
    "print(clf.intercept_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0xc657da0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7dsf937CPUfsYWCctXb3UbZZbq3dHPg8F+hY10bWWp+1Ns1am9amTUjvABUREYlLpaWltG7dWiEsjhhjaN269QmfxQx3EBsA3GuMmQdcaowZX8c204wx3YwxycBNHN7wV0REpEFSCIs/4XjNwnpp0lrbr+rzQBj7mzHmSWvtozU2exyYARjgTWvt++GsQURERCReROw+Ytba/tba1bVCGNbaldbaS6y1Xa21YyP1+CIiIlI/HTp0CGm7+++/P6J1LF26lKVLl0b0MWKFbugqIiISZ/x+8HohKclZ+v3RffxnnnkmovtvSEEsLlociYiIiMPvh8xMKC521gsLnXWAjIzwPlb//v3p1asXy5cv55133jlsfN68eQCUlJQwaNAg9u7dS+vWrZk9ezYpKUfGi7q2O3ToEEOGDGHbtm107dqV559/nkceeYQ33ngDgGnTpjF37lwOHjzIsGHD2LRpE23btmXSpElUVFQcsb/S0lIGDhzIgQMH6NChA5MmTQrvAYkAnRETERGJI2PHVoewKsXFzni4LViwgL59+x4WwmpbvXo1SUlJfPzxxwwfPpz9+/czevRo+vfv/+3H448/Xud2Pp+PLl268PHHH7N582aWL1/OU089xcMPP8zDDz/M3LlzAXj55Zfp0qULH330ER07dmTixIl17m/z5s385Cc/4f3336egoICtW7eG/6CEmc6IiYiIxJGiovqNn4guXbpwyy23HHWbHj160KVLF7773e/SsWNHrr/+el566aUjtrPWHrHd2rVr+eyzz5g3bx67d+9m48aNXHLJJUf829WrV39bR58+fXj77bcZPXr0Eftr1KgR48ePZ9KkSezcuZOSkpLwHIgI0hkxERGROBLsHueRuPd58+bNj7nNsmXLuPzyy3n33XfZtWsXn3zyScjbXXjhhdx///3MmzePJ5988tsbuDdt2pTiwGk/ay2dO3dmwYIFgHOWrnPnznXub8KECQwcOJCZM2fSrFmzMB2FyFIQExERiSPZ2eDxHD7m8TjjbvB6vTz77LNcdtllbNmyhbS0tJC3GzVqFG+//Tb9+vXjxRdf5NxzzwXg2muv5fXXX+fyyy/nk08+YeTIkaxatYp+/fqxbt06hg0bVuf+rr32Wp566imuvvpqADZu3Bi143C8jLXW7RqOKS0tzebm5rpdhoiISER8/vnnXHTRRSFv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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘图大小\n",
    "plt.figure(figsize=(10,10))\n",
    "\n",
    "# 中文标题\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.title('鸢尾花线性数据示例')\n",
    "\n",
    "plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)\n",
    "plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')\n",
    "\n",
    "# 绘制感知机的超平面\n",
    "x_ponits = np.arange(4, 8)\n",
    "y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]\n",
    "plt.plot(x_ponits, y_)\n",
    "\n",
    "# 其他部分\n",
    "plt.legend()  # 显示图例\n",
    "plt.grid(False)  # 不显示网格\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda\\conda\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:183: FutureWarning: max_iter and tol parameters have been added in Perceptron in 0.19. If max_iter is set but tol is left unset, the default value for tol in 0.19 and 0.20 will be None (which is equivalent to -infinity, so it has no effect) but will change in 0.21 to 1e-3. Specify tol to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0xc83e470>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7dsf937CPUfsYWCctXb3UbZZbq3dHPg8F+hY10bWWp+1Ns1am9amTUjvABUREYlLpaWltG7dWiEsjhhjaN269QmfxQx3EBsA3GuMmQdcaowZX8c204wx3YwxycBNHN7wV0REpEFSCIs/4XjNwnpp0lrbr+rzQBj7mzHmSWvtozU2exyYARjgTWvt++GsQURERCReROw+Ytba/tba1bVCGNbaldbaS6y1Xa21YyP1+CIiIlI/HTp0CGm7+++/P6J1LF26lKVLl0b0MWKFbugqIiISZ/x+8HohKclZ+v3RffxnnnkmovtvSEEsLlociYiIiMPvh8xMKC521gsLnXWAjIzwPlb//v3p1asXy5cv55133jlsfN68eQCUlJQwaNAg9u7dS+vWrZk9ezYpKUfGi7q2O3ToEEOGDGHbtm107dqV559/nkceeYQ33ngDgGnTpjF37lwOHjzIsGHD2LRpE23btmXSpElUVFQcsb/S0lIGDhzIgQMH6NChA5MmTQrvAYkAnRETERGJI2PHVoewKsXFzni4LViwgL59+x4WwmpbvXo1SUlJfPzxxwwfPpz9+/czevRo+vfv/+3H448/Xud2Pp+PLl268PHHH7N582aWL1/OU089xcMPP8zDDz/M3LlzAXj55Zfp0qULH330ER07dmTixIl17m/z5s385Cc/4f3336egoICtW7eG/6CEmc6IiYiIxJGiovqNn4guXbpwyy23HHWbHj160KVLF7773e/SsWNHrr/+el566aUjtrPWHrHd2rVr+eyzz5g3bx67d+9m48aNXHLJJUf829WrV39bR58+fXj77bcZPXr0Eftr1KgR48ePZ9KkSezcuZOSkpLwHIgI0hkxERGROBLsHueRuPd58+bNj7nNsmXLuPzyy3n33XfZtWsXn3zyScjbXXjhhdx///3MmzePJ5988tsbuDdt2pTiwGk/ay2dO3dmwYIFgHOWrnPnznXub8KECQwcOJCZM2fSrFmzMB2FyFIQExERiSPZ2eDxHD7m8TjjbvB6vTz77LNcdtllbNmyhbS0tJC3GzVqFG+//Tb9+vXjxRdf5NxzzwXg2muv5fXXX+fyyy/nk08+YeTIkaxatYp+/fqxbt06hg0bVuf+rr32Wp566imuvvpqADZu3Bi143C8jLXW7RqOKS0tzebm5rpdhoiISER8/vnnXHTRRSFv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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "clf = Perceptron(fit_intercept=True, \n",
    "                 max_iter=1000,\n",
    "                 tol=None,\n",
    "                 shuffle=True)\n",
    "clf.fit(X, y)\n",
    "\n",
    "# 绘图大小\n",
    "plt.figure(figsize=(10,10))\n",
    "\n",
    "# 中文标题\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.title('鸢尾花线性数据示例')\n",
    "\n",
    "plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)\n",
    "plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')\n",
    "\n",
    "# 绘制感知机的超平面\n",
    "x_ponits = np.arange(4, 8)\n",
    "y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]\n",
    "plt.plot(x_ponits, y_)\n",
    "\n",
    "# 其他部分\n",
    "plt.legend()  # 显示图例\n",
    "plt.grid(False)  # 不显示网格\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
